﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
using CrystalDecisions.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using LHS.Win.Report;
using LHS.Core.TableInfo;

namespace LHS.Win
{
    public partial class frmBaoCaoCuoiNgay : Form
    {
        // Methods
        LHS.Core.Clinical.ClinicalController objController = new LHS.Core.Clinical.ClinicalController();
        public frmBaoCaoCuoiNgay()
        {
            this.InitializeComponent();

        }
        private void btExit_Click(object sender, EventArgs e)
        {
            base.Close();
        }

        private void btXem_Click(object sender, EventArgs e)
        {
            if (this.cboBaoCao.Text == "")
            {
                MessageBox.Show("Vui lòng chọn mẫu báo cáo cần xem", "Mẫu Báo Cáo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
            else
            {
                string str = this.cboBaoCao.SelectedItem.ToString();
                string str2 = string.Empty;
                if (this.cboLoaiBenh.Items.Count == 0)
                {
                    MessageBox.Show("Hiện tại chưa có loại bệnh để thống kê", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    switch (str)
                    {
                        case "Doanh Thu":
                            {
                                DataTable dt = objController.GetClinicalInvoices(this.chkAll.Checked, this.ddlNgayA.Value.ToShortDateString(), this.ddlNgayB.Value.ToShortDateString(), this.cbDoctorName.SelectedValue.ToString());

                                if (dt == null || dt.Rows.Count == 0)
                                {
                                    MessageBox.Show("Báo cáo hiện chưa có dữ liệu.Xin vui lòng chọn lại tháng hoặc tên bác sĩ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                    this.report.ReportSource = null;
                                }
                                else
                                {
                                    DataSet ds = new DataSet();
                                    ds.Tables.Add(dt);
                                    SubReport subreport = new SubReport();
                                    subreport.SetDataSource(ds);
                                    this.report.ReportSource = subreport;
                                }
                                break;
                            }
                        case "Chẩn Đoán":
                            {
                                str2 = this.cboLoaiBenh.SelectedValue.ToString();
                                DataTable dtPathologicalClinical = objController.GetPathologicalClinical(chkAllSick.Checked, this.chkAll.Checked, this.ddlNgayA.Value.ToString("MM/dd/yyyy"), this.ddlNgayB.Value.ToString("MM/dd/yyyy"), this.cbDoctorName.SelectedValue.ToString(), str2);

                                if (dtPathologicalClinical == null || dtPathologicalClinical.Rows.Count == 0)
                                {
                                    MessageBox.Show("Báo cáo hiện chưa có dữ liệu.Xin vui lòng chọn lại tháng hoặc tên bác sĩ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                    this.report.ReportSource = null;
                                }
                                else
                                {
                                    DataSet dsPathologicalClinical = new DataSet();
                                    dsPathologicalClinical.Tables.Add(dtPathologicalClinical);
                                    ReportChanDoan doan = new ReportChanDoan();
                                    doan.SetDataSource(dsPathologicalClinical); //test here
                                    this.report.ReportSource = doan;
                                }
                                break;
                            }
                        case "Chẩn Đoán Ngoài Danh sách":
                            {
                                DataTable dt = objController.GetPathologicalSignsOutList(this.chkAll.Checked, this.ddlNgayA.Value.ToString("MM/dd/yyyy"), this.ddlNgayB.Value.ToString("MM/dd/yyyy"), this.cbDoctorName.SelectedValue.ToString());

                                if (dt == null || dt.Rows.Count == 0)
                                {
                                    MessageBox.Show("Báo cáo hiện chưa có dữ liệu.Xin vui lòng chọn lại tháng hoặc tên bác sĩ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                    this.report.ReportSource = null;
                                }
                                else
                                {
                                    DataSet ds = new DataSet();
                                    ds.Tables.Add(dt);

                                    ReportChanDoanNgoaiDS ids = new ReportChanDoanNgoaiDS();
                                    ids.SetDataSource(ds);
                                    this.report.ReportSource = ids;
                                }
                                return;
                            }
                    }
                }
            }
        }

        private void cboBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((this.cboBaoCao.SelectedItem.ToString() == "Chẩn Đoán Ngoài Danh sách") || (this.cboBaoCao.SelectedItem.ToString() == "Doanh Thu"))
            {
                this.cboLoaiBenh.Enabled = false;
                this.chkAllSick.Enabled = false;
            }
            else
            {
                this.cboLoaiBenh.Enabled = true;
                this.chkAllSick.Enabled = true;
                this.chkAllSick.Checked = false;
            }
        }

        private void chkAll_CheckedChanged(object sender, EventArgs e)
        {
            if (this.chkAll.Checked)
            {
                this.cbDoctorName.Enabled = false;
            }
            else
            {
                this.cbDoctorName.Enabled = true;
            }
        }

        private void chkAllSick_CheckedChanged(object sender, EventArgs e)
        {
            if (!this.chkAllSick.Checked)
            {
                this.cboLoaiBenh.Enabled = true;
            }
            else
            {
                this.cboLoaiBenh.Enabled = false;
            }
        }

        private void frmBaoCaoCuoiNgay_Load(object sender, EventArgs e)
        {
            try
            {
                //load danh sach nhan vien
                DataTable dtEmployee = objController.GetData(InfoEmployees.TABLENAME);
                this.cbDoctorName.DisplayMember = InfoEmployees.EMPNAME;
                this.cbDoctorName.ValueMember = InfoEmployees.EMPISN;
                this.cbDoctorName.DataSource = dtEmployee;

                this.cboBaoCao.Items.Add("Doanh Thu");
                this.cboBaoCao.Items.Add("Chẩn Đoán");
                this.cboBaoCao.Items.Add("Chẩn Đoán Ngoài Danh sách");

                //load danh sach cay PathologicalTree
                DataTable dtPathologicalTree = objController.GetData(InfoPathologicalTree.TABLENAME);

                this.cboLoaiBenh.DataSource = dtPathologicalTree;
                this.cboLoaiBenh.DisplayMember = InfoPathologicalTree.PLTNAME;
                this.cboLoaiBenh.ValueMember = InfoPathologicalTree.PLTISN;
            }
            catch (Exception ex)
            {
                Class.ShowException(ex);
            }



        }

        private void Report_HandleException(object source, ExceptionEventArgs e)
        {
            if (e.Exception is EngineException)
            {
                EngineException exception = (EngineException)e.Exception;
                if (exception.ErrorID == EngineExceptionErrorID.DataSourceError)
                {
                    e.Handled = true;
                    MessageBox.Show("An error has occurred while connecting to the database.");
                }
                else if (exception.ErrorID == EngineExceptionErrorID.LogOnFailed)
                {
                    e.Handled = true;
                    MessageBox.Show("Incorrect Logon Parameters. Check your user name and password.");
                }
            }
            if (e.Exception is ExecutionEngineException)
            {
                e.Handled = true;
                MessageBox.Show("ExecutionEngineException");
            }
        }

    }
}